package com.th.supcom.pds.impl.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;

import com.th.supcom.pds.domain.pojo.PdsPresc;
import com.th.supcom.pds.domain.pojo.PdsPrescCombine;
import com.th.supcom.pds.domain.pojo.PdsPrescDispenseWindow;
import com.th.supcom.pds.domain.vo.PdsPrescParametersVO;
import com.th.supcom.pds.domain.vo.PdsPrescVO;

/**
 * PdsPresc Mapper接口.
 * 
 * 处方主记录.
 */
public interface PdsPrescMapper
{
    /**
     * 通过给凭证号查询处方号
     * 
     * @param RcptNo 凭证号
     * @return 处方号的list
     */
    public List <String> getPrescNoByRcptNo (@Param ("rcptNo") String rcptNo);

    public List <PdsPrescVO> queryPrescByPrescNoOrPVID (PdsPrescParametersVO pdsPrescParametersVO);

    /**
     * 通过主键ID查询表记录.
     * 
     * @param id 主键ID.
     * @return PdsPresc 传输对象.
     */
    public PdsPresc getPdsPrescByID (@Param ("id") String id);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param params Map入参对象.
     * @return CpoeInOrder 结果对象集.
     */
    public List <PdsPresc> findPdsPrescListByMap (Map <String, Object> params);

    /**
     * 通过传输对象列表查询表记录.
     * 
     * @param List pdsPrescs.
     * @return List
     */
    public List <PdsPresc> findPdsPrescListByList (List <PdsPresc> pdsPrescs);

    /**
     * 根据处方记录信息对应的处方记录
     * 
     * @param pdsPrescCombines
     * @return
     */
    public List <PdsPrescCombine> findPdsPrescCombineByList (List <PdsPresc> pdsPrescs);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param params Map入参对象.
     * @return CpoeInOrder 结果对象集.
     */
    public List <PdsPrescCombine> findCombinePdsPrescListByMap (Map <String, Object> params);

    /**
     * 通过传输对象对应值查询表记录并且进行分页.
     * 
     * @param rowBounds 分页对象.
     * @param params Map入参对象.
     * @return CpoeInOrder 结果对象集.
     */
    public List <PdsPresc> findPdsPrescListWithPageByMap (RowBounds rowBounds, Map <String, Object> params);

    /**
     * 通过传输对象对应值查询表记录并且进行分页.
     * 
     * @param rowBounds 分页对象.
     * @param params Map入参对象.
     * @return CpoeInOrder 结果对象集.
     */
    public List <PdsPrescCombine> findCombinePdsPrescListWithPageByMap (RowBounds rowBounds, Map <String, Object> params);

    /**
     * 按条件统计事件类型.
     * 
     * @param params 查询参数
     * @return 符合条件的个数
     */
    public Integer findPdsPrescCountByMap (Map <String, Object> params);

    /**
     * 按条件统计事件类型.
     * 
     * @param params 查询参数
     * @return 符合条件的个数
     */
    public Integer findCombinePdsPrescCountByMap (Map <String, Object> params);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param pdsPresc 传输对象.
     * @return PdsPresc 结果对象.
     */
    public List <PdsPresc> findPdsPrescListByExample (PdsPresc pdsPresc);

    /**
     * 通过传输对象对应值查询表记录.
     * 
     * @param pdsPrescCombine 传输对象.
     * @return PdsPrescCombine 结果对象.
     */
    public List <PdsPrescCombine> findCombinePdsPrescListByExample (Map <String, Object> params);

    /**
     * 通过传输对象对应值查询表记录条数.
     * 
     * @param pdsPresc 传输对象.
     * @return 条数.
     */
    public int findPdsPrescCountByExample (PdsPresc pdsPresc);

    /**
     * 通过传输对象对应值查询表记录条数.
     * 
     * @param pdsPrescCombine 传输对象.
     * @return 条数.
     */
    public int findCombinePdsPrescCountByExample (PdsPrescCombine pdsPrescCombine);

    /**
     * 通过主键ID更新表记录.
     * 
     * @param pdsPresc 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyPdsPresc (PdsPresc pdsPresc);

    /**
     * 通过主键ID更新表记录，字段有值才更新.
     * 
     * @param pdsPresc 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyPdsPrescByExample (PdsPresc pdsPresc);

    /**
     * 通过VO对象插入记录.
     * 
     * @param pdsPresc 插入的传输对象.
     */
    public void addPdsPresc (PdsPresc pdsPresc);

    /**
     * 通过主键ID删除表记录.
     * 
     * @param id 删除的主键ID.
     * @return 删除条数.
     */
    public int removePdsPrescByID (@Param ("id") Long id);

    /**
     * 通过传入的Map参数删除表记录.
     * 
     * @param params 带条件的传入参数.
     * @return 删除条数.
     */
    public int removePdsPrescByMap (Map <String, Object> params);

    /**
     * 通过列表更新表记录，字段有值才更新.
     * 
     * @param List pdsPrescCombines 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyPdsPrescList (List <PdsPresc> pdsPrescs);

    /**
     * 通过列表更新表记录，字段有值才更新.
     * 
     * @param List pdsPrescCombines 更新的传输对象.
     * @return 更新条数.
     */
    public int modifyChargeIndicatorByList (List <PdsPresc> pdsPrescs);

    /**
     * 更新退药处方信息为已退药
     * 
     * @param pdsPrescs
     * @return
     */
    public int modifyPdsPrescListForReturn (List <PdsPresc> pdsPrescs);

    /**
     * 更新退药处方信息为已申请
     * 
     * @param pdsPrescs
     * @return
     */
    public int modifyPdsPrescListForRefund (List <PdsPresc> pdsPrescs);

    /**
     * 查询窗口排队情况
     * 
     * @param params
     * @return
     */
    public List <PdsPrescDispenseWindow> findPdsPrescWindowByMap (Map <String, Object> params);

    /**
     * 更新处方窗口
     * 
     * @param pdsPrescs
     * @return
     */
    public int modifyPdsPrescWindowList (List <PdsPresc> pdsPrescs);

    /** 公司版权信息. */
    public static final String copyright = "Copyright 2014, TH Supcom Corporation";

    /** 提交路径. */
    public static final String SCC_BRANCH = "$URL$";

    /** 提交日期. */
    public static final String SCC_LAST_MODIFICATION_DATE = "$Date$";

    /** 最终修改人员. */
    public static final String SCC_LAST_MODIFIER_NAME = "$Author$";

    /** 最终版本号. */
    public static final String SCC_REVISION = "$Revision$";

}